GIT
https://git.gosuslugi.local/pgs2-rtlabs/source/endpoints-access-info/-/tree/master/
Назначение
Сервис для хранения таблицы маршрутизации запросов и прав доступов к эндпоинтам сервисов.
Принимает
из сообщений кафки информацию об эндпоинтах сервиса и прав доступа к
ним. Сохраняет эту информацию в postgres. Эта информация в дальнейшем
используется сервисом proxy-gateway.
У сервиса нет собственных REST API контроллеров (rest api методов) - всё взаимодействие производится через KAFKA
БД
Сервис имеет собственную БД endpoints-access-info в Postgres с 1 таблицей access_info
Структура таблицы access_info:
Имя поля | Формат | Описание | Пример |
|---|---|---|---|
| id | bigint | primary key | |
| app_name | varchar(255) | Имя приложения, должно быть равно имени его Service кубера | nsi-registry |
| pkg | varchar(500) | Абсолютный путь к java классу с контроллером, поле для информации, не участвует в логике. | sx.microservices.nsiregistry.controller.registry.RegistryController |
| method | varchar(255) | метод запроса - GET, POST и т.п. | Get |
| ingress_path | varchar(500) | Базовый путь к приложению, то же самое что и сейчас у него в пути ingress. | /service/nsi-registry |
| path | varchar(500) | Путь к эндпоинту внутри приложения, например "/requests/example". Поддерживается wildcard, пример - "/request/*" - будет принимать любое значение на месте * Еще пример "/request/*/*" | /registry/*/records |
| rules | jsonb | Json с полями perms и roles, где perms - массив permissions, roles - массив ролей. Можно указать либо что-то одно либо ничего вообще. | {"perms": null, "roles": null} - означает что для доступа достаточно лишь валидного токена, без разницы какие у него роли. |
| manual | boolean | Поле для определения в ручную заполнен этот маршрут запросом в базу или автоматически сервисом enpoints-access-info-service | false |
| modified | timestamp | Дата редактирования | 2023-03-21 10:10:10.287561 |
| modified_by | varchar(255) | Источник редактирования | Manual или AccessInfoService |
Примеры скриптов для таблицы access-info
Примеры указаны без учёта требования отдела DBA по оформлению скриптов для релиза.
Полностью одинаковых (дублей) записей в таблице access_info делать не нужно.
Добавление новой записи:
В
первую очередь рекомендуется проверить есть ли уже такая запись, чтобы
не плодить дубли. Если такая запись уже есть - проверить актуальные ли
права доступа в ней.
Скрипт добавления записи
|
Обновление записи в таблице:
Обновление по id, задание прав доступа:
Скрипт обновления записи
|
Удаление записи в таблице:
Для удаления лучше всего использовать id чтобы не удалить лишнего
Скрипт удаления записи
|
KAFKA
Взаимодействует только с топиком pgs.proxy.endpoints.access.info как consumer и producer
Взаимодействие с proxy-gateway
Библиотека pgs-proxy-library на старте приложения находит все контроллеры с аннотацией PgsAccessRules, принимает из нее роли и permissions, формирует запись вида Method, Path, rules и отправляет через кафку в сервис endpoints-access-info, который сохраняет полную информацию о маршрутах в базу postgres актуализируя записи (если для этого сервиса записи уже есть - он их пересоздаст, таким образом поддерживается удаление и обновление ендпоинтов в таблице маршрутизации), при этом если у существующей записи стоит признак manual = true - то запись не будет обновлена либо удалена, это сделано для того, чтобы иметь возможность в ручную изменять записи и чтобы они после этого не перезаписывались автоматически.
Схема взаимодействия
Добавить комментарий